/-docs
/-editor
/-files
/-files-old
/-imports
/-layout
/-storage
/-tests
/-typings
TypeScriptService.ts
functions.ts
ko.ts
persistence.api.ts
persistence.ts
shell.ts
teapo.html
teapo.js
teapo.ts
x
    private _initWithStorage(load: teapo.storage.attached.LoadStorage, forceLoadFromDom: boolean, pathElements: { [name: string]: HTMLScriptElement; }) {
182
        callback: (transaction: SQLTransaction, result: SQLResultSet) => void,
183
        errorCallback: (transaction: SQLTransaction, error: SQLError) => void) => {
184
185
        var errorCallbackSafe = (t: SQLTransaction, e: SQLError) => {
186
          alert(e + ' ' + e.message + '\n' + sqlStatement + '\n' + args);
187
          errorCallback(t, e);
188
        };
189
190
        db.transaction((t) => t.executeSql(sqlStatement, args, callback, errorCallbackSafe));
191
      };
192
      this._insertMetadataSql = 'INSERT INTO "*metadata" (name, value) VALUES(?,?)';
193
      this._updateMetadataSql = 'UPDATE "*metadata" SET value=? WHERE name=?';
194
195
      this._metadataProperties = {};
196
      this._loadTableListFromWebsql((tableList) => {
197
        this._initWithTableList(tableList, forceLoadFromDom, pathElements);
198
      });
199
    }
200
201
    private _initWithStorage(load: teapo.storage.attached.LoadStorage, forceLoadFromDom: boolean, pathElements: { [name: string]: HTMLScriptElement; }) {
202
      var domEdited = this._metadataElement ?
203
        safeParseInt(this._metadataElement.getAttribute('edited')) :
204
        null;
205
206
      if (domEdited || 0 < load.editedUTC || 0) {
207
        console.log('DOM is younger, need to call load.load', domEdited, load.editedUTC);
208
      }
209
      else {
210
        console.log('DOM is older, need to call load.migrate', domEdited, load.editedUTC);
211
        var filesByName: { [fullPath: string]: { [propertyName: string]: string; }; } = { };
212
        for (var fullPath in pathElements) if (pathElements.hasOwnProperty(fullPath)) {
213
          var pbag: any = {};
214
          loadPropertyBagFromDom(pathElements[fullPath], pbag);
215
          var contentStr = decodeFromInnerHTML(pathElements[fullPath].innerHTML);
216
          pbag[''] = contentStr;
217
218
          
219
          console.log(Object.keys(pbag), fullPath, pathElements[fullPath]);
220
          filesByName[fullPath] = pbag;
221
        }
222
223
        load.migrate(
224
          domEdited || new Date().valueOf(),
225
          filesByName,
226
          (error, updater) => {
227
            console.log('migrate completed: ', error, updater, filesByName);
228
          });
229
      }
230
    }
231
232
    private _initWithTableList(tableList: string[], forceLoadFromDom: boolean, pathElements: { [name: string]: HTMLScriptElement; }) { 
233
      var metadataTableExists = false;
234
      for (var i = 0; i < tableList.length; i++) {
235
        if (tableList[i] === '*metadata') {
236
          metadataTableExists = true;
237
          break;
238
        }
239
      }
240
      if (!metadataTableExists || forceLoadFromDom) {
241
        this._loadInitialStateFromDom(pathElements);
242
        return;
243
      }
244
245
      var domEdited = this._metadataElement ?
246
        safeParseInt(this._metadataElement.getAttribute('edited')) :
247
        null;
248
249
      loadPropertiesFromWebSql(
0:0